package com.xuelang.pipeline.app.application;

import com.xuelang.pipeline.client.application.dto.ComponentDTO;
import com.xuelang.pipeline.client.application.dto.ComponentQuery;
import com.xuelang.pipeline.client.common.constant.DictDTO;
import com.xuelang.pipeline.client.common.request.PageParam;
import com.xuelang.pipeline.client.common.result.PageRecord;

import java.util.List;

/**
 * 组件服务接口
 *
 * @author xiwen.zxg
 * @since 2024/5/15
 */
public interface ComponentService {
    /**
     * 查询组件列表(有过滤条件)
     *
     * @param dtoPageParam
     * @return
     */
    PageRecord<ComponentDTO> pageList(PageParam<ComponentQuery> dtoPageParam);

    /**
     * 查询组件列表(有过滤条件)
     *
     * @param componentQuery
     * @return
     */
    List<ComponentDTO> list(ComponentQuery componentQuery);
    /**
     * 添加组件
     *
     * @param componentDTO
     * @return
     */
    Boolean add(ComponentDTO componentDTO);

    /**
     * 更新组件
     *
     * @param componentDTO
     * @return
     */
    Boolean update(ComponentDTO componentDTO);

    /**
     * 删除组件
     *
     * @param componentLabel
     * @return
     */
    Boolean delete(String componentLabel);
    /**
     * 查询组件
     *
     * @param componentLabel
     * @return
     */
    ComponentDTO query(String componentLabel);

    /**
     *  用于查询组件信息提供给组件，
     *  返回结果校验不通过，返回null List
     * @param componentLabel
     * @return
     */
    List<DictDTO> queryComponentRepo(String componentLabel);

    /**
     *  用于查询组件信息提供给组件，
     *  返回结果校验不通过，返回null List
     * @param componentLabel
     * @return
     */
    List<DictDTO> queryComponentToken(String componentLabel);


    /**
     * 查询组件详情
     * @param id
     * @return
     */
    ComponentDTO queryById(Long id);

    /**
     * 根据组件id获取组件对应的镜像tag列表
     * @param componentId
     * @return
     */
    List<String> queryComponentImageTagList(Long componentId);
}
